//axios三层封装


//用于封装axios的工具-->改造axios
import axios from "axios"

//引用存储工具
import storage from "@/utils/storage.js"

//单独引入element-ui中的message
import { Message } from "element-ui"

//引入路由文件
import router from "@/router/index.js"


//1.设置默认地址
axios.defaults.baseURL = 'http://127.0.0.1:5000'



// 1.添加请求拦截器--->在请求头中添加上token
axios.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么 

    //携带上，如果不通过登录途径进入，添加，删除，修改等功能都做不了,后端设置的
    if (storage.getSession("tk")) {
        config.headers.Authorization = storage.getSession("tk");
    }

    // console.log('请求拦截器', config);

    return config;
}, function(error) {
    // 对请求错误做些什么 
    return Promise.reject(error);
});


// 2.添加响应拦截器 
axios.interceptors.response.use(function(response) {
    // 2xx 范围内的状态码都会触发该函数。 
    // 对响应数据做点什么 
    //console.log('响应拦截器', response);
    let { code, msg } = response.data;
    if (code === 0) { //如果直接!code,如果没有code的话也可能执行这一步骤
        Message({
            message: msg,
            type: "success",
        });
    } else if (code === 1) {
        Message.error(msg);
    }

    //在拦截器中统一设置弹窗
    return response;
}, function(error) {
    // 超出 2xx 范围的状态码都会触发该函数。 
    // 对响应错误做点什么 

    //只要向后端发送数据，就会匹配到请求头的tk不对
    console.dir(error.response.data);
    if (error.response.data.code == 401) {
        //如果令牌错误的话
        //只要接收后端的数据就会执行
        router.push("/login");
    }


    return Promise.reject(error);
});


// 暴露axios-->上面所有步骤都是对axios进行配置
export default axios;